package com.it.jdbc;


import org.junit.BeforeClass;
import org.junit.Test;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import java.util.Map;

public class JdbcTemplateTest {
private static JdbcTemplate jdbcTemplate=null;
    @BeforeClass
    public static void init() {

        //1.创建数据源
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/jdbc");
        //2.创建jdbcTemplate模板对象
        jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);

    }

    @Test
    public void Test01() {

        //3.完成insert操作
        int count = jdbcTemplate.update("insert into account values (null,?,?)", "eee", 1000f);
        System.out.println("count = " + count);
    }
    @Test
    public void Test02() {

        //3.完成update操作
        int update = jdbcTemplate.update("update account set money=? where id=?", 1500f,3);
        System.out.println(update);
    }

    @Test
    public void Test03() {

        //3.完成delete操作
        int delete = jdbcTemplate.update("delete from account where id=?", 5);
        System.out.println(delete);
    }

    @Test
    public void Test04() {

        /*
        单行单列
        参数一: 要执行的sql
         参数二: 返回的类型的字节码对象
         参数三: sql所需要的参数-
         返回指定类型的一个数据

        public <T> T queryForObject(String sql, Class<T> requiredType, Object... args)
         */
        String query = jdbcTemplate.queryForObject("select name from account where id=?", String.class, 2);
        System.out.println(query);
    }

    @Test
    public void Test05() {

        //单行多列

        /*我们使用该方法查询一条记录并封装到实体中 BeanPropertyRowMapper<T>(T.class)
        查询返回Map对象
        public Map<String, Object> queryForMap(String sql, Object... args)
        将一条查询结果封装到map中返回
        sql: 要执行的sql
        args: sql所需要的参数

        测试查询结果为单行多列
     *      1.使用map去接收数据
     *          key为字段的名称，value为字段对应的值
        */
        Map<String, Object> accountMap = jdbcTemplate.queryForMap("select * from account where id=?", 3);
        System.out.println(accountMap);

    }
}
